#ifndef __BUOLA_GUI_X11_CPIXMAP_H__
#define __BUOLA_GUI_X11_CPIXMAP_H__

#include <buola/gui/x11/auto.h>
#include <buola/image/csurface.h>

namespace buola { namespace gui { namespace x11 {

class CPixmap : public img::CSurface
{
public:
    CPixmap();
    virtual ~CPixmap();

////////////////////////////////////////
////////////////////////////////////////
////////////// Interface ///////////////
////////////////////////////////////////
////////////////////////////////////////
public:
    bool Create(TID pID,const CSize_i &pSize=CSize_i(nUndefined),int=0);
    void Create(const CSize_i&,int=0);
    void Create(const CSize_i&,int pDepth,unsigned char *pData,int pStride=0);
    void Destroy();
    CSize_i SurfaceSize();
    
    img::CGC *GetGC(img::EGCCaps pCaps);

    void BitBlt(const CPoint_d&,const CSize_d&,img::CSurface*,const CPoint_d&,bool=false);

    TID GetID() {   return mDrawableID; }

    void *XVisual()           {   return mVisual;     }
    int Depth()                 {   return mDepth;      }

////////////////////////////////////////
////////////////////////////////////////
//////////////// Helpers ///////////////
////////////////////////////////////////
////////////////////////////////////////
//Overridable
public:

////////////////////////////////////////
////////////////////////////////////////
///////////////// DATA /////////////////
////////////////////////////////////////
////////////////////////////////////////
protected:
    CSize_i mSize;

    TID mDrawableID;
    bool mOwnID;

    void *mVisual;
    int mDepth;

////////////////////////////////////////
////////////////////////////////////////
/////////////// Friends ////////////////
////////////////////////////////////////
////////////////////////////////////////
    friend class CX11GC;
    friend class CFont;
};

/*namespace x11*/ } /*namespace gui*/ } /*namespace buola*/ }

#endif
